package com.interview.item.javabase.redis;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import redis.clients.jedis.Jedis;

import java.util.UUID;

/**
 * @Author:zxh
 * @Description:
 * @Date: 2020/9/5
 * @Modified By:
 */
public class RedisLock {

    public static void main(String[] args) {

        Jedis jedis = new Jedis();
        String lockKey = "lockKey";
        String clenitId = UUID.randomUUID().toString();
        Long lockStatus = jedis.setnx(lockKey, clenitId);
        //给锁设置超时时间
        jedis.expire(lockKey,10);
        //原值操作
        //stringRedisTemplete.opsForValue().setIfAbsent(lockKey,"一把锁"，10，ONE),和上面2条指令一个效果

        //当业务执行超过设定的过期时间，如何给这个锁续命；redisson
        if (lockStatus == 0) {

        }

        try {
            System.out.println("获取到分布式锁，执行业务");
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //判断是否是自己加的ID
            if (clenitId.equals(jedis.get(lockKey))) {
                jedis.del(lockKey);
            }

        }

        //互联网工具专题：git，maven，Jenkins，Linux，虚拟机容器-docker-kubernetes
        //单台redis的QPS能够到达几万到10万
        //主从结构，master-slave，哨兵机制，当主master挡掉，自动切换到slave作为主节点
        //1.一个主从，一个线程刚创建锁，还没来得及同步到slave中，就挡掉，此时又来了一个线程获取锁，成功获取，如何解决这个问题
        //2.

    }
}
